package com.pxmeta.party.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pxmeta.party.entity.Party;
import com.pxmeta.party.entity.PartyUser;
import com.pxmeta.party.entity.dto.CreatePartyDTO;
import com.pxmeta.party.entity.dto.DispatchDTO;
import com.pxmeta.party.entity.dto.OperateDispatchDTO;
import com.pxmeta.party.entity.dto.SetPasswordDTO;
import com.pxmeta.user.entity.User;
import com.pxmeta.user.entity.vo.AnchorVO;

import java.util.List;

/**
 * <p>
 * 语聊派对表 服务类
 * </p>
 *
 * @author wcl
 * @since 2022-06-25
 */
public interface IPartyService extends IService<Party> {


    String getPartyNumber();

    Party createParty(CreatePartyDTO dto, Long userId);

    PartyUser joinParty(String partyId, Long userId, Integer role);

    void dissolution(Long userId, Long partyId);

    void signOut(Long userId, Long partyId);

    /**
     * 获取主播列表
     * @return
     */
    List<AnchorVO> getAnchorList();

    /**
     * 添加管理员
     * @param adminUsername
     */
    void addAdmin(String partyId,String adminUsername,Integer type);

    /**
     * 获取管理员列表
     * @return
     */
    List<User> getAdminList(String partyId);

    /**
     * 移出管理员
     * @param partyId
     * @param adminUsername
     */
    void removeAdmin(String partyId, String adminUsername);

    /**
     * 随机获取派单厅id
     * @return
     */
    String getRandomPartyId(Integer type);

    /**
     * 获取超级管理员列表
     * @param partyId
     * @return
     */
    List<User> getSuperAdminList(String partyId);

    /**
     * 获取公会角色
     * @param userId
     * @return
     */
    Integer getAssociationRole(Long userId);

    /**
     * 获取公会房间列表
     * @param associationId
     * @return
     */
    IPage<Party> getAssociationPartyList(Integer page, Integer size, Long associationId, String keyword);

    /**
     * 设置房间密码
     * @param dto
     */
    void setPassword(SetPasswordDTO dto);

    /**
     * 校验密码
     * @param password
     * @return
     */
    Boolean checkPassword(String partyId, String password);

    /**
     * 获取用户的个人直播间。
     * @param userId
     * @return
     */
    Party getLastPersonalLive(Long userId, Integer type);
}
